<?php
C_base::yn_file('m'.DS.'material'.DS.'materialModel.php');
class fileModel extends materialModel{
	
	function __construct(){
		$con = C_base::M('admin.base')->con_s();
		$filetype = @$con['filetype'] ? $con['filetype'] : 'txt,doc,docx,ppt,pptx,xls,xlsx,wps,7z,zip,rar,rtf,pdf,amr';
		$this->filetype = explode(',',$filetype);
		
	}
	
	function getlj($id){//获取附件路径
		$fg = explode('_', $id);//分割取出表id和附件id
		if(is_array($fg)){
			$cha = $this->cha($fg[0],array('id'=>$fg[1]));//查看附件信息
			if($cha){
				$one = substr($cha['md5'],0,2);//一级文件夹名称
				$two = substr($cha['md5'],2,2);//二级文件夹名称
				$lj = FIL.$one.DS.$two.DS.$cha['md5'].'.'.$cha['type'];//附件地址
				return $lj;
			}
		}
	}
	
	/**
	 * 获取附件
	 * $id 附件id
	 * $key 密匙
	 */
	function get($id,$key=''){
		$fg = explode('_', $id);//分割取出表id和附件id
		if(is_array($fg)){
			$cha = $this->cha($fg[0],array('id'=>$fg[1]));//查看附件信息
			if($cha){
				$one = substr($cha['md5'],0,2);//一级文件夹名称
				$two = substr($cha['md5'],2,2);//二级文件夹名称
				$lj = FIL.$one.DS.$two.DS.$cha['md5'].'.'.$cha['type'];//附件地址
				if(is_file($lj)){//如果存在直接获取内容进行输出
					$jianr = file_get_contents($lj);//获取附件内容(已加密)
					$key = @$key ? $key : MTR_KEY;
					$nr = util::jiemi($jianr,$key);//解密附件内容
					return $nr;
				}
			}
		}
	}
	
	function del($id){//删除附件
		$fg = explode('_', $id);//分割取出表id和附件id
		if(is_array($fg)){
			$cha = $this->cha($fg[0],array('id'=>$fg[1]));//查看附件信息
			if($cha){
				$one = substr($cha['md5'],0,2);//一级文件夹名称
				$two = substr($cha['md5'],2,2);//二级文件夹名称
				$lj = FIL.$one.DS.$two.DS.$cha['md5'].'.'.$cha['type'];//附件地址
				if(!unlink($lj)){
					return 0;
				}else{
					$shan = $this->shan($fg[0],array('id'=>$fg[1]));
					return $shan;
				}
			}
		}
	}
	
	/**
	 * 保存附件
	 * $post=array('type'=>$type,'content'=>$content,'key'=>$key);
	 * $type 附件类型
	 * $content 附件内容
	 * $key 密匙
	 */
	function save($post = array()){
		extract($post);
		$type = strtolower($type);//转小写
		if(!in_array($type, $this->filetype)){//判断是否是允许上传的类型
			return '';//不符合文件上传类型
		}
		$id = '';
		if($key != MTR_KEY){//如果是加密用户自有的加密方法加密。那么多出来一份附件为使用默认密码加密的
			$nr = util::jiami($content,MTR_KEY);
			$id = $this->share($nr,$type);
		}
		$nr = util::jiami($content,$key);//启用加密设置对上传上来的附件进行加密
		$kid = $this->share($nr,$type);
		return $kid.'|'.$id;
	}
	
	/**
	 * 更新附件
	 * $id 附件id
	 * $key 新密匙
	 */
	function update($id,$key){
		$fg = explode('_', $id);//分割取出表id和附件id
		if(is_array($fg)){
			$cha = $this->cha($fg[0],array('id'=>$fg[1]));//查看附件信息
			if($cha){
				$one = substr($cha['md5'],0,2);//一级文件夹名称
				$two = substr($cha['md5'],2,2);//二级文件夹名称
				$lj = FIL.$one.DS.$two.DS.$cha['md5'].'.'.$cha['type'];//附件地址
				$jianr = file_get_contents($lj);//获取附件内容(已加密)
				$jienr = util::jiemi($jianr,MTR_KEY);//解密附件内容
				$nr = util::jiami($jienr,$key);//加密原始附件内容
				$id = $this->share($nr,$cha['type']);
				return $id;
			}
		}
	}
	
	/**
	 * 公共调用部分
	 * $nr 文件内容
	 * $type 文件类型
	 */
	function share($nr,$type){//公共调用部分
		$md5 = md5($nr);//文件名称
		$int = util::md5_int($md5);//md5转数字
		$mid = util::end2($int);//取最后两位
		$pd = $this->cha($int,array('md5'=>$md5));//判断是否存在
		if($pd){
			$id = $pd['id'];
		}else{
			if(!is_dir(FIL)){//判断文件夹是否存在
				mkdir(FIL,0777);//创建目录，最大访问权限
			}
			$one = substr($md5,0,2);//一级文件夹名称
			$ml = FIL.$one.DS;//一级文件夹
			if(!is_dir($ml)){//判断一级文件夹是否存在
				mkdir($ml,0777);//创建目录，最大访问权限
			}
			$two = substr($md5,2,2);//二级文件夹名称
			$ml .= $two.DS;//二级文件夹
			if(!is_dir($ml)){//判断二级文件夹是否存在
				mkdir($ml,0777);//创建目录，最大访问权限
			}
			$lj = $ml.$md5.'.'.$type;//附件文件路径
			if(is_file($lj)){
				unlink($lj);
			}
			file_put_contents($lj, $nr);//写入
			$arr = array('mid'=>$mid,'type'=>$type,'md5'=>$md5,'time'=>time());
			$id = $this->xie($int,$arr);//写入数据
		}
		return $mid.'_'.$id;
	}
	
}